/**
 * Hoja de trabajo 1 - Radio
 * 
 * El programa simula el funcionamiento del un radio a través de la 
 * implementación de una interfaz IRadio la cual fue desarrollada
 * en clase. 
 * 
 * El estado del raido es encendido / apagado y puede ser usado para
 * sintonizar AM o FM. Se tienen 12 botones para guardar las emisoras
 * sintonizadas las cuales permiten seleccionar. Las frecuencias AM
 * se representan por múltiplos de 10 en el rango 530 a 1610. Las
 * frecuencias FM se encuentran en el rango de 87.9 a 107.9 en múltiplos
 * de 0.2
 * 
 * Autor: Esteban Ortiz
 * Fecha: 2010-07-19
 */
package gui;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JToggleButton;

import actions.Main;

/**
 * Construye los botones de preset e implimenta las acciones
 * @author setian
 *
 */
public class PanelPresets extends JPanel implements ActionListener {

	// ------------------------------------------------------------------------
	// Constantes
	// ------------------------------------------------------------------------

	/**
	 * Constante predeterminada para la serialización
	 */
	private static final long serialVersionUID = 1L;

	// ------------------------------------------------------------------------
	// Atributos de la interfaz
	// ------------------------------------------------------------------------
	private static JButton prs1;
	private static JButton prs2;
	private static JButton prs3;
	private static JButton prs4;
	private static JButton prs5;
	private static JButton prs6;
	private static JButton prs7;
	private static JButton prs8;
	private static JButton prs9;
	private static JButton prs10;
	private static JButton prs11;
	private static JButton prs12;

	/**
	 * Botón de dos estados para guardar la emisora que se muestra
	 */
	private static JToggleButton guardarEmisora;
	
	// ------------------------------------------------------------------------
	// Constructor
	// ------------------------------------------------------------------------
	/**
	 * Construye el panel con los botones para las 12 emisoras.
	 */
	public PanelPresets() {
		// Distribución de los componentes en el panel
		setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		c.weightx = 0.5;
		c.weighty = 0.5;
		c.fill = GridBagConstraints.BOTH;
		
		// (1)
		prs1 = new JButton("1");
		prs1.addActionListener(this);
		c.gridx = 1;
		c.gridy = 0;
		add(prs1, c);

		// 2
		prs2 = new JButton("2");
		prs2.addActionListener(this);
		c.gridx = 2;
		c.gridy = 0;
		add(prs2, c);

		// 3
		prs3 = new JButton("3");
		prs3.addActionListener(this);
		c.gridx = 3;
		c.gridy = 0;
		add(prs3, c);

		// 4
		prs4 = new JButton("4");
		prs4.addActionListener(this);
		c.gridx = 4;
		c.gridy = 0;
		add(prs4, c);

		//5
		prs5 = new JButton("5");
		prs5.addActionListener(this);
		c.gridx = 5;
		c.gridy = 0;
		add(prs5, c);

		// 6
		prs6 = new JButton("6");
		prs6.addActionListener(this);
		c.gridx = 6;
		c.gridy = 0;
		add(prs6, c);
		
		// 7
		prs7 = new JButton("7");
		prs7.addActionListener(this);
		c.gridx = 1;
		c.gridy = 1;
		add(prs7, c);

		// 8
		prs8 = new JButton("8");
		prs8.addActionListener(this);
		c.gridx = 2;
		c.gridy = 1;
		add(prs8, c);

		// 9
		prs9 = new JButton("9");
		prs9.addActionListener(this);
		c.gridx = 3;
		c.gridy = 1;
		add(prs9, c);

		// 10
		prs10 = new JButton("10");
		prs10.addActionListener(this);
		c.gridx = 4;
		c.gridy = 1;
		add(prs10, c);

		// 11
		prs11 = new JButton("11");
		prs11.addActionListener(this);
		c.gridx = 5;
		c.gridy = 1;
		add(prs11, c);

		// 12
		prs12 = new JButton("12");
		prs12.addActionListener(this);
		c.gridx = 6;
		c.gridy = 1;
		add(prs12, c);
		
		// Guardar
		guardarEmisora = new JToggleButton("Save", new ImageIcon("./images/save-icon.png"));
		guardarEmisora.setToolTipText("Haca clic aquí y luego seleccione un preset.");
		guardarEmisora.setFocusable(false);
		c.gridx = 0;
		c.gridy = 0;
		c.gridheight = 2;
		add(guardarEmisora, c);
		
		botonesActivados(false);
	}

	// ------------------------------------------------------------------------
	// Métodos
	// ------------------------------------------------------------------------

	/**
	 * Cambia el estado de los botones de preset según el radio esté encendido
	 * o no.
	 */
	protected void botonesActivados(boolean estado) {
		prs1.setEnabled(estado);
		prs2.setEnabled(estado);
		prs3.setEnabled(estado);
		prs4.setEnabled(estado);
		prs5.setEnabled(estado);
		prs6.setEnabled(estado);
		prs7.setEnabled(estado);
		prs8.setEnabled(estado);
		prs9.setEnabled(estado);
		prs10.setEnabled(estado);
		prs11.setEnabled(estado);
		prs12.setEnabled(estado);
		guardarEmisora.setEnabled(estado);
	}
	/**
	 * Ejecuta una acción según el botón que haya sido presionado.
	 * 
	 * @param e Es el evento de clic sobre uno de los botones.
	 */
	public void actionPerformed(ActionEvent e) {
		int numBoton = Integer.parseInt( e.getActionCommand() ) - 1;
		
		// Verifica si está habilitada la opción de guardar
		if (guardarEmisora.isSelected()) {
			Main.radio.guardarEmisora(numBoton, Main.radio.darEmisora());
			guardarEmisora.setSelected(false);
		}
		else
			Main.radio.seleccionarEmisora(numBoton);
		
		// Actualiza el display 
		PanelDisplay.actualizarTexto(true, numBoton + 1);	// true porque son botones preset
	}
}
